import java.util.HashMap;
import java.util.Map;

public class 连续数组 {
    /**
     * https://leetcode.cn/problems/contiguous-array/
     * 哈希表＋前缀和
     */

    public int findMaxLength(int[] nums) {
        //哈希表存储前缀和,前一个存储和, 后一个存储下标
        Map<Integer,Integer> preSum = new HashMap<>();
        int sum = 0;
        int ans = 0;
        //为0下标为-1,处理长度不需要减一
        preSum.put(0,-1);
        for(int i = 0;i < nums.length;i++){
            sum += (nums[i] == 1 ? 1 : -1);//1就+1,-1就-1
            if(preSum.containsKey(sum)){
                ans = Math.max(ans,i - preSum.get(sum));
            }else{
                preSum.put(sum,i);
            }
        }
        return ans;
    }
}
